package demo2;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
 * @PropertySource注解用于告知Spring容器需要加载一个配置文件
 * 参数用于指定配置文件所在的位置。
 * 常用格式:
 * classpath:文件名
 *
 * classpath(类路径)，这里这样的写法“classpath:”指的时后面指定的文件在类路径中
 * 这里类路径指的是JVM读取.class文件时的起始路径，也称为"类加载路径"
 * 背景知识:
 * 在Maven项目中，源代码放在:
 * src/main
 *        -/java            这里存所有的.java原文件以及对应的包
 *        -/resources       其他的资源文件
 *
 * 当maven项目编译后，上述两个路径中的内容会整合在一起统一放在:
 * target/classes
 * 这个目录就是JVM的类加载路径，从这里开始顺着我们类定义的包可以找到对应的字节码文件
 *
 * 那么:
 * 我们定义了一个配置文件:config.properties,我们将其放在src/main/resources中，当maven项目
 * 编译后该文件保存在target/classes中。
 * 因此在类加载路径的起始位置应当就能看到名为config.properties文件
 *
 * Spring容器既可以找到对应的配置文件，然后使用上面定义的配置项配合@Value注解初始化属性
 *
 */
@Component
@PropertySource("classpath:config.properties")
public class User {
    /*
      Value注解可以在属性上使用，用于为属性初始化；
     */
   // @Value("张三")
    @Value("${demo2.user.name}")
    private String name;
     @Value("${user.age}")
   // @Value("22")
    private int age;

    public String getName() {
        return name;
    }
    //也可以在属性对应的set方法上使用Value注解，为属性初始化；
   // @Value("李四")
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }
   // @Value("33")
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
